package com.clkj.mobileinspector.utils;


import android.text.TextUtils;

import com.clkj.mobileinspector.MyApp;
import com.clkj.mobileinspector.model.Constant;
import com.clkj.mobileinspector.model.ObserverOnNext;
import com.clkj.mobileinspector.model.OkHttpUtils;
import com.clkj.mobileinspector.model.bean.LogBean;
import com.clkj.mobileinspector.model.bean.LogResultBean;
import com.clkj.mobileinspector.model.bean.UserBean;
import com.lws.basic.utils.common.GsonUtils;
import com.lws.basic.utils.common.MyLogger;
import com.lws.basic.utils.common.PhoneStateUtils;
import com.lws.basic.utils.common.SharePreferenceUtils;
import com.lws.basic.utils.common.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

/**
 * @author 松
 * 2020/10/4 14:08
 */
public class LogUtils {
    /**
     *
     * @param module 模块名称
     * @param logType 0：登录；1：查询；2：新增；3：修改；4：删除; 5: 登出 6：其他
     * @param uri uri
     * @param url url
     * @param formatParam 参数名称+参数内容
     * @param response 响应内容
     * @param result 访问结果 值为“成功”或者“失败”，
     * @param errorLog 记录操作失败日志，提示消息即可
     * @param content 访问了哪些敏感数据如文件等
     */
    public static void logUpload( String module,String logType,String uri,String url ,String formatParam,String response ,String result,String errorLog,String content) {
        try {
            String json = SharePreferenceUtils.getString(MyApp.getContext(), Constant.userCredential, "");
            MyLogger.i(json);
            String token = SharePreferenceUtils.getString(MyApp.getContext(), "token", "");
           if(!TextUtils.isEmpty(token)) {
               UserBean userBean = GsonUtils.getInstance().fromJson(json, UserBean.class);
               List<LogBean> logBeanList = new ArrayList<>();
               LogBean log = new LogBean();

               //身份证号码
               log.setCardNo(userBean.getCredential().getLoad().getUserInfo().getSfzh());
               //证书 sn 号
               log.setSn(userBean.getCredential().getServerSign().getSn());
               //应用唯一标识，需找集中管控技术支持进行申请
               log.setSource(Constant.source);
               //警号id
               log.setPoliceId(userBean.getCredential().getLoad().getUserInfo().getJh());
               //会话标识
               log.setSessionId(token);
               //访问了哪些敏感数据如文件等，需上报访问文件的名称，如有路径需要给出
               log.setContent(content);
               //访问服务ip
               log.setDestIp("");
               // 访问服务端口
               log.setDestPort(0);
               //参数名称+参数内容,查询时记录查询参数， 新增，修改，删除需记录相关信息的主键 id 及名称标题信
               log.setFormatParam(formatParam);
               //用户具体操作类型代表，0：登录；1：查询；2：新增；3：修改；4：删除; 5: 登出 6：其他
               log.setLogType(logType);
               //功能模块名称
               log.setModule(module);
               //原请求参数
               log.setParams("");
               //响应内容
               log.setResponse(response);
               //响应内容 时间
               log.setResponseTime("200");
               //响应内容 1: json 2: html
               log.setResponseType("1");
               //访问结果 值为“成功”或者“失败”，
               log.setResult(result);
               // 记录操作失败日志，提示消息即可
               log.setErrorLog(errorLog);

               //请求的源ip，一般与终端ip一致，若经过多层转发，可能会是代理的 ip
               log.setSourceIp("");
               //请求源端口
               log.setSourcePort(0);
               //终端ip
               log.setTerminalIp(PhoneStateUtils.getIPAddress(MyApp.getContext()));
               //时间戳
               log.setTime(TimeUtils.getCurrentStamp());
               log.setUri(uri);
               log.setUrl(url);
               logBeanList.add(log);


               OkHttpUtils.post(Constant.log, GsonUtils.getInstance().toJson(logBeanList), LogResultBean.class)
                       .subscribe(new Observer<LogResultBean>() {
                           @Override
                           public void onSubscribe(Disposable d) {

                           }

                           @Override
                           public void onNext(LogResultBean logResultBean) {
                               if (logResultBean.getCode().equals("1")) {
                                   MyLogger.i("日志上传成功");
                               } else if (logResultBean.getCode().equals("401")) {
                                   MyLogger.i("日志401 需重新获取授权");
                               } else {
                                   MyLogger.i("日志上传失败");
                               }
                           }

                           @Override
                           public void onError(Throwable e) {
                               MyLogger.i("日志报错： "+e.getMessage());
                           }

                           @Override
                           public void onComplete() {
                               MyLogger.i("日志 onComplete() ");
                           }
                       });
//               OkHttpUtils.post(Constant.log, GsonUtils.getInstance().toJson(logBeanList), LogResultBean.class)
//                       .subscribe(new ObserverOnNext<LogResultBean>() {
//                           @Override
//                           public void onNext(LogResultBean logResultBean) {
//                               if (logResultBean.getCode().equals("1")) {
//                                   MyLogger.i("日志上传成功");
//                               } else if (logResultBean.getCode().equals("401")) {
//                                   MyLogger.i("日志401 需重新获取授权");
//                               } else {
//                                   MyLogger.i("日志上传失败");
//                               }
//                           }
//                       });
           }

        } catch (Exception e) {

            MyLogger.i(e.getMessage());
        }

    }
}
